package main

func main() {

	nums1 := []int{1, 2, 2, 1}
	nums2 := []int{2, 2}

	r := intersect(nums1, nums2)

	for _, v := range r {
		println(v)
	}
}

func intersect(nums1 []int, nums2 []int) []int {

	m1 := make(map[int]int)
	m2 := make(map[int]int)

	for i := 0; i < len(nums1)+len(nums2); i++ {

		if i < len(nums1) {

			_, ok := m1[nums1[i]]
			if ok {
				m1[nums1[i]]++
			} else {
				m1[nums1[i]] = 1
			}
		}

		if i < len(nums2) {
			_, ok := m2[nums2[i]]
			if ok {
				m2[nums2[i]]++
			} else {
				m2[nums2[i]] = 1
			}
		}
	}

	r := make([]int, 0)

	for k, v := range m1 {

		// 如果元素都出现
		if v2, ok := m2[k]; ok {
			min := v
			if v > v2 {
				min = v2
			}

			for i := 0; i < min; i++ {
				r = append(r, k)
			}
		}
	}

	return r
}
